package org.example;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class ExcelStyleExample {
    public static void main(String[] args) throws Exception {
        // 1. 打开现有的"输出.xlsx"文件
        // 使用 WorkbookFactory.create() 自动识别文件类型（XLS/XLSX），适用于 HSSF 和 XSSF
        try (Workbook workbook = WorkbookFactory.create(new FileInputStream("输出.xlsx"))) {
            Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

            // 2. 获取表头行（假设是第一行）
            // 注意：如果表头行不存在（如 sheet.getRow(0) 为 null），需要先创建行
            Row headerRow = sheet.getRow(0);
            if (headerRow == null) {
                headerRow = sheet.createRow(0); // 如果不存在则创建
            }

            // 3. 创建表头样式
            CellStyle headerStyle = workbook.createCellStyle();

            // 设置字体
            Font font = workbook.createFont();
            font.setFontName("微软雅黑"); // 设置字体名称（支持中文）
            font.setFontHeightInPoints((short)12); // 设置字体大小（单位：磅）
            font.setBold(true); // 设置加粗
            font.setColor(IndexedColors.WHITE.getIndex()); // 设置字体颜色（白色）
            headerStyle.setFont(font); // 将字体应用到样式

            // 设置背景色
            headerStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex()); // 设置前景色（蓝色）
            headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 设置填充模式为纯色填充

            // 设置对齐方式
            headerStyle.setAlignment(HorizontalAlignment.CENTER); // 水平居中
            headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中

            // 设置边框
            // 设置四周边框为细实线（BorderStyle.THIN）
            headerStyle.setBorderTop(BorderStyle.THIN);
            headerStyle.setBorderBottom(BorderStyle.THIN);
            headerStyle.setBorderLeft(BorderStyle.THIN);
            headerStyle.setBorderRight(BorderStyle.THIN);

            // 设置边框颜色为黑色
            headerStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
            headerStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
            headerStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
            headerStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());

            // 4. 应用样式到表头行的所有单元格
            // 遍历表头行的所有单元格，设置样式
            for (Cell cell : headerRow) {
                cell.setCellStyle(headerStyle);
            }

            // 5. 另存为新文件
            // 将修改后的工作簿写入新文件
            try (FileOutputStream fos = new FileOutputStream("带样式的输出.xlsx")) {
                workbook.write(fos);
            }

            System.out.println("样式已成功应用并保存为新文件！");
        }
    }
}
